namespace Domain.Core
{
    /// <summary>
    /// Interfaces an object that is capable of exchaning <see cref="MoneyCurrency"/>
    /// for <see cref="Money"/> values.
    /// </summary>
    public interface ICurrencyExchanger
    {
        /// <summary>
        /// Exchanges <see cref="Money"/> from one <see cref="MoneyCurrency"/> to another.
        /// </summary>
        /// <param name="newCurrency">The currency to convert the money to.</param>
        /// <param name="originalValue">The original value of the money (to be converted).</param>
        /// <returns>The value of the <see cref="Money"/> in the new currency.</returns>
        /// <exception cref="CurrencyExchangeException">Thrown when the currency exchanger
        /// fails to exchange the currency.</exception>
        Money ExchangeCurrency(MoneyCurrency newCurrency, Money originalValue);
    }
}